package chapter5.additional;

// 1. 定义一个父类
class Animal {
    void eat() {
        System.out.println("动物在吃东西");
    }
}

// 2. 定义一个子类
class Dog extends Animal {
    void bark() {
        System.out.println("狗在汪汪叫");
    }
}

// 3. 定义另一个子类
class Cat extends Animal {
    void meow() {
        System.out.println("猫在喵喵叫");
    }
}

public class InstanceofDemo {
    public static void main(String[] args) {
        // 4. 创建不同类型的对象
        Animal animal1 = new Animal();
        Animal animal2 = new Dog();  // 向上转型
        Animal animal3 = new Cat();  // 向上转型

        // 5. 使用 instanceof 检查对象类型
        checkAnimalType(animal1);
        checkAnimalType(animal2);
        checkAnimalType(animal3);
    }

    // 6. 检查动物类型的方法
    public static void checkAnimalType(Animal animal) {
        System.out.println("\n检查动物类型...");

        // 检查是否是 Animal 类或其子类的实例
        if (animal instanceof Animal) {
            System.out.println("这是一个动物");
            animal.eat();
        }

        // 检查是否是 Dog 类的实例
        if (animal instanceof Dog) {
            System.out.println("这是一只狗");
            Dog dog = (Dog) animal;  // 向下转型
            dog.bark();
        }

        // 检查是否是 Cat 类的实例
        if (animal instanceof Cat) {
            System.out.println("这是一只猫");
            Cat cat = (Cat) animal;  // 向下转型
            cat.meow();
        }
    }
}